// 导入Taro
import Taro from '@tarojs/taro'

// 环境配置
export const ENV_CONFIG = {
  // 开发环境配置
  development: {
    // 本地开发（模拟器使用）
    local: 'http://192.168.174.112:3000',
    // 局域网IP（真机调试使用） - 请根据实际情况修改
    network: 'http://192.168.174.112:3000',
    // 备用IP地址
    fallback: 'http://127.0.0.1:3000',
    // 更多备用地址
    alternatives: [
      'http://192.168.1.100:3000',
      'http://192.168.0.100:3000',
      'http://10.0.0.100:3000'
    ]
  },
  // 生产环境配置
  production: {
    baseURL: 'http://192.168.7.125:3000'
  }
}

// 检测是否在真机环境
const isRealDevice = () => {
  try {
    // 使用Taro的API检测环境
    const systemInfo = Taro.getSystemInfoSync()
    const isDevTools = systemInfo.platform === 'devtools'
    console.log('系统信息:', systemInfo)
    console.log('是否为开发者工具:', isDevTools)
    return !isDevTools
  } catch (error) {
    console.error('检测设备环境失败:', error)
    // 降级处理：尝试使用wx API
    try {
      const systemInfo = (global as any).wx?.getSystemInfoSync?.()
      return systemInfo?.platform !== 'devtools'
    } catch (wxError) {
      console.error('wx API也失败，默认为模拟器环境:', wxError)
      return false
    }
  }
}

// 获取本机IP地址（用于真机调试）
const getLocalNetworkIP = () => {
  // 这里可以返回您当前电脑的局域网IP
  // 您需要根据实际情况更新这个IP地址
  console.log('🔍 检测到真机环境，使用网络IP:', ENV_CONFIG.development.network)
  return ENV_CONFIG.development.network
}

// 测试多个URL的连通性
const testUrlConnectivity = async (urls: string[]): Promise<string | null> => {
  for (const url of urls) {
    try {
      console.log(`🌐 测试连接: ${url}`)
      const response = await Taro.request({
        url: `${url}/api/health`,
        method: 'GET',
        timeout: 3000
      })
      if (response.statusCode >= 200 && response.statusCode < 300) {
        console.log(`✅ 连接成功: ${url}`)
        return url
      }
    } catch (error) {
      console.log(`❌ 连接失败: ${url}`, error)
    }
  }
  return null
}

// 获取当前环境的API地址
export const getBaseURL = () => {
  const isDevelopment = process.env.NODE_ENV === 'development'
  
  console.log('当前环境:', {
    NODE_ENV: process.env.NODE_ENV,
    isDevelopment,
    isRealDevice: isRealDevice()
  })
  
  if (isDevelopment) {
    const realDevice = isRealDevice()
    const baseUrl = realDevice 
      ? getLocalNetworkIP()
      : ENV_CONFIG.development.local
      
    console.log('选择的API地址:', baseUrl)
    return baseUrl
  }
  
  return ENV_CONFIG.production.baseURL
}

// 异步获取可用的API地址
export const getAvailableBaseURL = async (): Promise<string> => {
  const isDevelopment = process.env.NODE_ENV === 'development'
  
  if (!isDevelopment) {
    return ENV_CONFIG.production.baseURL
  }
  
  // 构建测试URL列表
  const testUrls = [
    ENV_CONFIG.development.local,
    ENV_CONFIG.development.network,
    ENV_CONFIG.development.fallback,
    ...ENV_CONFIG.development.alternatives
  ]
  
  console.log('🔍 开始测试API地址连通性...')
  const availableUrl = await testUrlConnectivity(testUrls)
  
  if (availableUrl) {
    console.log('✅ 找到可用的API地址:', availableUrl)
    return availableUrl
  }
  
  console.warn('⚠️ 所有API地址都不可用，使用默认地址')
  return ENV_CONFIG.development.local
}

// 导出当前使用的API地址
export const API_BASE_URL = getBaseURL()

// 打印当前使用的API地址（调试用）
console.log('=== 环境配置信息 ===')
console.log('当前API地址:', API_BASE_URL)
console.log('运行环境:', isRealDevice() ? '真机' : '模拟器')
console.log('NODE_ENV:', process.env.NODE_ENV)
console.log('===================')